package com.inter.law.dao;

import java.util.ArrayList;
import java.util.List;
import org.hibernate.LockMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.inter.law.entity.IlDept;

/**
 * A data access object (DAO) providing persistence and search support for
 * IlDept entities. Transaction control of the save(), update() and delete()
 * operations can directly support Spring container-managed transactions or they
 * can be augmented to handle user-managed Spring transactions. Each of these
 * methods provides additional information for how to configure it for the
 * desired type of transaction control.
 * 
 * @see com.inter.law.entity.IlDept
 * @author MyEclipse Persistence Tools
 */

public class IlDeptDAO extends HibernateDaoSupport {
	private static final Logger log = LoggerFactory.getLogger(IlDeptDAO.class);
	// property constants
	public static final String DEPT_NAME = "deptName";
	public static final String DEPT_LOCATION = "deptLocation";
	public static final String DEPT_AVAILABLE = "deptAvailable";
	public static final String DEPT_OFFICE = "deptOffice";

	protected void initDao() {
		// do nothing
	}

	public void save(IlDept transientInstance) {
		log.debug("saving IlDept instance");
		try {
			getHibernateTemplate().save(transientInstance);
			log.debug("save successful");
		} catch (RuntimeException re) {
			log.error("save failed", re);
			throw re;
		}
	}

	public void delete(IlDept persistentInstance) {
		log.debug("deleting IlDept instance");
		try {
			getHibernateTemplate().delete(persistentInstance);
			log.debug("delete successful");
		} catch (RuntimeException re) {
			log.error("delete failed", re);
			throw re;
		}
	}

	public IlDept findById(java.lang.Integer id) {
		log.debug("getting IlDept instance with id: " + id);
		try {
			System.out.println("helo");
			IlDept instance = (IlDept) getHibernateTemplate().get(
					"com.inter.law.entity.IlDept", id);
			System.out.println("helo");
			return instance;
		} catch (RuntimeException re) {
			log.error("get failed", re);
			throw re;
		}
	}

	public List findByExample(IlDept instance) {
		log.debug("finding IlDept instance by example");
		try {
			List results = getHibernateTemplate().findByExample(instance);
			log.debug("find by example successful, result size: "
					+ results.size());
			return results;
		} catch (RuntimeException re) {
			log.error("find by example failed", re);
			throw re;
		}
	}

	public List findByProperty(String propertyName, Object value) {
		log.debug("finding IlDept instance with property: " + propertyName
				+ ", value: " + value);
		try {
			String queryString = "from IlDept as model where model."
					+ propertyName + "= ?";
			return getHibernateTemplate().find(queryString, value);
		} catch (RuntimeException re) {
			log.error("find by property name failed", re);
			throw re;
		}
	}
	
	public List getNameListByIdList(List<Integer> idList){
		if(idList==null||idList.size()==0){
			return null;
		}else{
			List<String> list=new ArrayList<String>();
			for(int i=0;i<idList.size();i++){
				list.add(findNameById(idList.get(i)));
			}
			return list;
		}
		
	}
	
	public String findNameById(Integer id){
		try {
			String queryString = "from IlDept as model where model.id="
					+ id;
			List<IlDept> list=getHibernateTemplate().find(queryString);
			if(list!=null&&list.size()>0){
				return list.get(0).getDeptName();
			}
			return null;
		} catch (RuntimeException re) {
			log.error("find by property name failed", re);
			throw re;
		}
	}

	public List findByDeptName(Object deptName) {
		return findByProperty(DEPT_NAME, deptName);
	}

	public List findByDeptLocation(Object deptLocation) {
		return findByProperty(DEPT_LOCATION, deptLocation);
	}

	public List findByDeptAvailable(Object deptAvailable) {
		return findByProperty(DEPT_AVAILABLE, deptAvailable);
	}

	public List findByDeptOffice(Object deptOffice) {
		return findByProperty(DEPT_OFFICE, deptOffice);
	}

	public List findAll() {
		log.debug("finding all IlDept instances");
		try {
			String queryString = "from IlDept";
			return getHibernateTemplate().find(queryString);
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}

	public IlDept merge(IlDept detachedInstance) {
		log.debug("merging IlDept instance");
		try {
			IlDept result = (IlDept) getHibernateTemplate().merge(
					detachedInstance);
			log.debug("merge successful");
			return result;
		} catch (RuntimeException re) {
			log.error("merge failed", re);
			throw re;
		}
	}

	public void attachDirty(IlDept instance) {
		log.debug("attaching dirty IlDept instance");
		try {
			getHibernateTemplate().saveOrUpdate(instance);
			log.debug("attach successful");
		} catch (RuntimeException re) {
			log.error("attach failed", re);
			throw re;
		}
	}

	public void attachClean(IlDept instance) {
		log.debug("attaching clean IlDept instance");
		try {
			getHibernateTemplate().lock(instance, LockMode.NONE);
			log.debug("attach successful");
		} catch (RuntimeException re) {
			log.error("attach failed", re);
			throw re;
		}
	}

	public static IlDeptDAO getFromApplicationContext(ApplicationContext ctx) {
		return (IlDeptDAO) ctx.getBean("IlDeptDAO");
	}
}